home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_WO-XL.ZIP / WipeoutXL.txt < prev    next >
Text File  |  1998-12-09  |  12KB  |  255 lines

  1.  
  2. Free Information Xchange presents:
  3.  
  4. Wipeout XL - CD crack by Static Vengeance - Dec 5th, 1998
  5.  
  6. Requirements:
  7. Full game install and Hex editor
  8. W32Dasm if you want to follow along
  9.  
  10.     WipeoutXL is an updated version of Wipeout2097, which is a futuristic racing game where you can
  11. shoot opponents and collect power-ups.  This newer version has full support for Direct3D and PowerVR (sgl)
  12. native version.  Not bad as far as futuristic racers go, I guess but there is one little problem that
  13. bothers me.  This little "problem" is more of a program BUG.  The bug I'm speaking of is the need to have
  14. the game CD in the CD-ROM drive when you play the game.  As you know, bugs like this can be patched.  So
  15. get out W32Dasm and disassmble wipeout2.exe  From there just go up to the menu bar and select REFS then
  16. data string refereneces from the drop down menu.  When the pop-up box apears, grab the slider bar and
  17. scroll down until you see "Make sure Wipeout XL CD is in " double click this and you're right in the middle
  18. of the CD check, which looks like this:
  19.  
  20. * Referenced by a CALL at Address:
  21. |:0045EA1D                                                              <-- Called only once
  22. |
  23. :00430C3A 55                      push ebp
  24. :00430C3B 8BEC                    mov ebp, esp
  25. :00430C3D 83EC04                  sub esp, 00000004
  26. :00430C40 53                      push ebx
  27. :00430C41 56                      push esi
  28. :00430C42 57                      push edi
  29. :00430C43 E851FCFFFF              call 00430899                         <-- Check for CD through WINMM.dll calls
  30.  
  31. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  32. |:00430CA8(U)
  33. |
  34. :00430C48 0FBF05DCDC4800          movsx eax, word ptr [0048DCDC]
  35. :00430C4F 83F801                  cmp eax, 00000001
  36. :00430C52 0F8555000000            jne 00430CAD                          <-- Take this jump for CD found
  37. :00430C58 C7057029490001000000    mov dword ptr [00492970], 00000001
  38. :00430C62 6841200000              push 00002041
  39.  
  40. * Possible StringData Ref from Data Obj ->"Wipeout XL CD Validator"
  41.                                   |
  42. :00430C67 688CF74800              push 0048F78C
  43.  
  44. * Possible StringData Ref from Data Obj ->"Make sure Wipeout XL CD is in "  <-- What brought us here
  45.                                         ->"the CD drive."
  46.                                   |
  47. :00430C6C 68A4F74800              push 0048F7A4
  48. :00430C71 A13C244A00              mov eax, dword ptr [004A243C]
  49. :00430C76 50                      push eax
  50.  
  51. * Reference To: USER32.MessageBoxA, Ord:0195h
  52.                                   |
  53. :00430C77 FF15F814BD00            Call dword ptr [00BD14F8]
  54. :00430C7D 8945FC                  mov dword ptr [ebp-04], eax
  55. :00430C80 C7057029490000000000    mov dword ptr [00492970], 00000000
  56. :00430C8A 837DFC01                cmp dword ptr [ebp-04], 00000001
  57. :00430C8E 0F850A000000            jne 00430C9E                           <-- Take this jump for "retry"
  58. :00430C94 E800FCFFFF              call 00430899                          <-- Check for CD again
  59. :00430C99 E90A000000              jmp 00430CA8
  60.  
  61. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  62. |:00430C8E(C)
  63. |
  64. :00430C9E 6AFF                    push FFFFFFFF
  65. :00430CA0 E87B390400              call 00474620
  66. :00430CA5 83C404                  add esp, 00000004
  67.  
  68. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  69. |:00430C99(U)
  70. |
  71. :00430CA8 E99BFFFFFF              jmp 00430C48
  72.  
  73. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  74. |:00430C52(C)                                                             <-- Getting here exits CD check
  75. |
  76. :00430CAD 684072A600              push 00A67240
  77. :00430CB2 6A01                    push 00000001
  78. :00430CB4 E88EF7FFFF              call 00430447
  79. :00430CB9 83C408                  add esp, 00000008
  80. :00430CBC A344C4A600              mov dword ptr [00A6C444], eax
  81. :00430CC1 5F                      pop edi
  82. :00430CC2 5E                      pop esi
  83. :00430CC3 5B                      pop ebx
  84. :00430CC4 C9                      leave
  85. :00430CC5 C3                      ret
  86.  
  87.     A small self enclosed routine.  This routine doesn't return any special pass/fail value.  The calls
  88. to 430899 check for the CD and check for specific track information.  A brief look at this code and you'll
  89. see whats going on.  I cut out most of the code but will show you the general flow of the code.  Here, it's
  90. not the important you understand each instruction but "read" the general flow:
  91.  
  92. * Referenced by a CALL at Addresses:
  93. |:00430C43   , :00430C94                   <-- Called twice from above
  94. |
  95. :00430899 55                      push ebp
  96. :0043089A 8BEC                    mov ebp, esp
  97. :0043089C 81EC70020000            sub esp, 00000270
  98. :004308A2 53                      push ebx
  99. :004308A3 56                      push esi
  100.  
  101.  -- SNIP non essential code --
  102.  
  103. :00430966 680D080000              push 0000080D
  104. :0043096B A1FCE29100              mov eax, dword ptr [0091E2FC]
  105. :00430970 50                      push eax
  106.  
  107. * Reference To: WINMM.mciSendCommandA, Ord:0032h                 <-- Check for CD using WINMM.dll calls
  108.                                   |
  109. :00430971 FF152C15BD00            Call dword ptr [00BD152C]
  110. :00430977 898590FDFFFF            mov dword ptr [ebp+FFFFFD90], eax
  111. :0043097D 83BD90FDFFFF00          cmp dword ptr [ebp+FFFFFD90], 00000000
  112. :00430984 0F8433000000            je 004309BD
  113. :0043098A 66C705DCDC48000100      mov word ptr [0048DCDC], 0001
  114. :00430993 6A00                    push 00000000
  115. :00430995 6A00                    push 00000000
  116. :00430997 6804080000              push 00000804
  117. :0043099C A1FCE29100              mov eax, dword ptr [0091E2FC]
  118. :004309A1 50                      push eax
  119.  
  120. * Reference To: WINMM.mciSendCommandA, Ord:0032h
  121.                                   |
  122. :004309A2 FF152C15BD00            Call dword ptr [00BD152C]
  123. :004309A8 81BD90FDFFFF01010000    cmp dword ptr [ebp+FFFFFD90], 00000101
  124. :004309B2 0F8505000000            jne 004309BD
  125. :004309B8 E8F3F9FFFF              call 004303B0
  126.  
  127. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  128. |:00430984(C), :004309B2(C)
  129. |
  130. :004309BD C745F803000000          mov [ebp-08], 00000003
  131. :004309C4 8D45F0                  lea eax, dword ptr [ebp-10]
  132. :004309C7 50                      push eax
  133. :004309C8 6800010000              push 00000100
  134. :004309CD 6814080000              push 00000814
  135. :004309D2 A1FCE29100              mov eax, dword ptr [0091E2FC]
  136. :004309D7 50                      push eax
  137.  
  138. * Reference To: WINMM.mciSendCommandA, Ord:0032h
  139.                                   |
  140. :004309D8 FF152C15BD00            Call dword ptr [00BD152C]
  141. :004309DE 898590FDFFFF            mov dword ptr [ebp+FFFFFD90], eax
  142.  
  143.  -- SNIP non essential code --
  144.  
  145. :00430A4D 6810010000              push 00000110
  146. :00430A52 6814080000              push 00000814
  147. :00430A57 A1FCE29100              mov eax, dword ptr [0091E2FC]
  148. :00430A5C 50                      push eax
  149.  
  150. * Reference To: WINMM.mciSendCommandA, Ord:0032h                    <-- More WINMM calls
  151.                                   |
  152. :00430A5D FF152C15BD00            Call dword ptr [00BD152C]
  153. :00430A63 898590FDFFFF            mov dword ptr [ebp+FFFFFD90], eax
  154. :00430A69 83BD90FDFFFF00          cmp dword ptr [ebp+FFFFFD90], 00000000
  155. :00430A70 0F840E000000            je 00430A84
  156.  
  157.  -- SNIP non essential code --
  158.  
  159. :00430AA0 50                      push eax
  160. :00430AA1 8B8598FDFFFF            mov eax, dword ptr [ebp+FFFFFD98]
  161. :00430AA7 50                      push eax
  162.  
  163. * Possible StringData Ref from Data Obj ->"Track %2d - %02d:%02d:%02d"  <-- This cought my eye!
  164.                                   |
  165. :00430AA8 6870F74800              push 0048F770
  166. :00430AAD 8D45AC                  lea eax, dword ptr [ebp-54]
  167. :00430AB0 50                      push eax
  168.  
  169. * Reference To: USER32.wsprintfA, Ord:0262h
  170.                                   |
  171. :00430AB1 FF156014BD00            Call dword ptr [00BD1460]
  172. :00430AB7 83C418                  add esp, 00000018
  173. :00430ABA 8D45AC                  lea eax, dword ptr [ebp-54]
  174. :00430ABD 50                      push eax
  175. :00430ABE 8D859CFDFFFF            lea eax, dword ptr [ebp+FFFFFD9C]
  176. :00430AC4 50                      push eax
  177.  
  178. * Reference To: KERNEL32.lstrcatA, Ord:028Dh                            <-- Compares string bytes
  179.                                   |
  180. :00430AC5 FF157413BD00            Call dword ptr [00BD1374]
  181. :00430ACB 33C0                    xor eax, eax
  182.  
  183.  -- SNIP non essential code --
  184.  
  185. :00430C2E 33C0                    xor eax, eax
  186. :00430C30 E900000000              jmp 00430C35
  187.  
  188. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  189. |:00430C30(U)
  190. |
  191. :00430C35 5F                      pop edi               <-- The end of this routine!
  192. :00430C36 5E                      pop esi
  193. :00430C37 5B                      pop ebx
  194. :00430C38 C9                      leave
  195. :00430C39 C3                      ret
  196.  
  197. * Referenced by a CALL at Address:
  198. |:0045EA1D                                              <-- Beginning of first code section I showed you
  199. |
  200. :00430C3A 55                      push ebp
  201. :00430C3B 8BEC                    mov ebp, esp
  202. :00430C3D 83EC04                  sub esp, 00000004
  203.  
  204.     So as long as you can get the general idea of what's going all you'll be fine.  I can tell that the
  205. code is using the WINMM (Windows MultiMedia) dll to check for the CD.  I would say the line that says "Track
  206. %2d - %02d:%02d:%02d" means the routine is checking for specific info on a certain CD track.  The you have the
  207. string function calls shortly after that.  All this is saying is "look for track x @ time hour:min:sec" and
  208. compare bytes against what we know should be there.  Hey, maybe I'm not 100% right, but I do know it IS a CD
  209. check.  When looking at the first section of code I showed, you'll see that it doesn't return any value.  So
  210. a quick look at the code surounding the caller is in order, just to be sure: 
  211.  
  212.   -- Program code --
  213. :0045E9F1 8B0D3C244A00            mov ecx, dword ptr [004A243C]
  214. :0045E9F7 51                      push ecx
  215.  
  216. * Reference To: USER32.UpdateWindow, Ord:024Fh
  217.                                   |
  218. :0045E9F8 FF15A814BD00            Call dword ptr [00BD14A8]
  219. :0045E9FE C705E8E29100B0E29100    mov dword ptr [0091E2E8], 0091E2B0
  220. :0045EA08 C605B6E2910001          mov byte ptr [0091E2B6], 01
  221. :0045EA0F 53                      push ebx
  222. :0045EA10 684072A600              push 00A67240
  223. :0045EA15 E8A6A6FAFF              call 004090C0
  224. :0045EA1A 83C408                  add esp, 00000008
  225. :0045EA1D E81822FDFF              call 00430C3A              <-- Do the CD check, no special value returned
  226. :0045EA22 68D0AB4B00              push 004BABD0
  227. :0045EA27 E8640FFDFF              call 0042F990
  228.   -- Continuing program code --
  229.  
  230.     To crack this one, just stop the call to CD check from being made.  The easiest way to do that is to
  231. overwrite the call with mov eax, 00000001.  Same amount of bytes and it harmlessly loads eax with one.  Make
  232. the patch to the exe file and you can race WipeoutXL without the CD in your CD rom drive!  The exact same
  233. technique will work for the PowerVR version.  Both edits are listed below.  To make a cracked copy of this
  234. one and run it from your hard drive follow these steps:
  235.  
  236. 1.  Do a full game install
  237. 2.  Make the following patch by version:
  238.  
  239. For the D3D version edit wipeout2.exe
  240. =============================================
  241. Search for: E8 18 22 FD FF  at offset 384,541
  242. Change to : B8 01 00 00 00
  243.  
  244. For the PowerVR version edit wipeout2.exe
  245. =============================================
  246. Search for: E8 48 BF 03 00  at offset  88,989
  247. Change to : B8 01 00 00 00
  248.  
  249. 3.  Enjoy the game without the need for the CD!
  250.  
  251.     Yet another minor programming bug has been FiX'ed
  252.  
  253. Static Vengeance - FiX
  254.  
  255.